package cn.wenhaha.app.data.service.imp;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.ds.simple.SimpleDataSource;
import cn.wenhaha.app.data.bean.dto.DBConfigDTO;
import cn.wenhaha.app.data.bean.dto.QueryParam;
import cn.wenhaha.app.data.bean.vo.DataListVo;
import cn.wenhaha.app.data.service.DataMysqlService;
import cn.wenhaha.common.constant.DataType;
import cn.wenhaha.common.exception.ApiMSGException;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;

import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * --------
 *
 * @author ：wyndem
 * @Date ：Created in 2022-04-19 19:28
 */
@Service
public class DataMysqlServiceImp implements DataMysqlService {


    @Override
    public Object save(DBConfigDTO dbConfig) {
//        DbConfig dbConfigDao = new DbConfig();
//        dbConfigDao.setName(dbConfig.getName());
//        dbConfigDao.setAliasName(dbConfig.getAliasName());
//        dbConfigDao.setPassword(dbConfig.getPassword());
//        dbConfigDao.setHost(dbConfig.getHost());
//        dbConfigDao.setPort(dbConfig.getPort());
//        dbConfigDao.setDbType(DataType.MYSQL.name());
//        dbConfigDao.setTableName(dbConfig.getTableName());
//        dbConfigDao.setUpdateTime(new Date());
//        dbConfigDao.setParameter(dbConfig.getParameter());
//        dbConfigDao.setRemake(dbConfig.getRemake());
//        test(dbConfigDao);
//        if(dbConfig.getId()==null){
//            // 新增
//            dbConfigDao.setCreateTime(new Date());
//            dbConfigDao.save();
//        }else {
//            //更新
//            dbConfigDao.setId(dbConfig.getId());
//            dbConfigDao.update();
//        }
        return MapUtil.builder().put("id","213").build();
    }

    @Override
    public void test(Integer id) {
//        final DbConfig dbConfig = DbConfig.dao.findById(id);
//        if(dbConfig==null || dbConfig.getId()==null){
//            throw ApiMSGException.build(7003);
//        }
//        test(dbConfig);
    }


    /**
     * <p>
     *    测试链接
     * </p>
     * @Author: Wyndem
     * @DateTime: 2022-04-22 15:24
     */
//    private  void test(DbConfig dbConfigDao){
//
//        String url="jdbc:mysql://{}:{}/{}";
//        try {
//            DataSource ds = new SimpleDataSource(StrUtil.format(url,dbConfigDao.getHost(),dbConfigDao.getPort(),dbConfigDao.getTableName()),
//                    dbConfigDao.getName(), dbConfigDao.getPassword());
//            ds.setLoginTimeout(3);
//            PreparedStatement pst =ds.getConnection()
//                    .prepareStatement("select 1 as r", ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
//            ResultSet resultSet = pst.executeQuery();
//            resultSet.first();
//            try {
//                resultSet.close();
//                pst.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw ApiMSGException.build(7002);
//        }
//    }

    @Override
    public Object info(Integer id) {
//        final DbConfig dbConfig = DbConfig.dao.findById(id);
//        if(dbConfig==null || dbConfig.getId()==null){
//            throw ApiMSGException.build(7003);
//        }
        return "";
    }

    @Override
    public void delete(Integer id) {
//        DbConfig.dao.deleteById(id);
    }

    @Override
    public List<DataListVo> list(QueryParam queryParam) {
//        final List<DataListVo> collect = DbConfig.dao.list(BeanUtil.beanToMap(queryParam))
//                .stream().map(config -> {
//                    final DataListVo dataListVo = new DataListVo();
//                    dataListVo.setId(config.getId());
//                    dataListVo.setName(config.getAliasName());
//                    dataListVo.setUpdateTime(config.getUpdateTime());
//                    dataListVo.setCreateTime(config.getCreateTime());
//                    return dataListVo;
//                }).collect(Collectors.toList());
        return new ArrayList<>();
    }
}
